package com.learn.springbootnetty.tcpdemo.接收并反馈;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 服务端:利用TCP协议接收数据
 */
public class Server {
    public static void main(String[] args) throws IOException {
         /*
            接收并反馈
            客户端:发送一条数据,接收服务端反馈的消息并打印
            服务器:接收数据并打印,再给客户端反馈消息
         */

        // 1.创建服务器端的ServerSocket对象绑定客户端连接的端口
        ServerSocket ss = new ServerSocket(6777);

        // 2.监听客户端连接:等待客户端连接,一旦有客户端来连接,会返回客户端的连接对象
        Socket socket = ss.accept();

        // 3.从连接管道中获取输入流读取数据
        // 字符缓冲输入流                          字符输入转换流                字节输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        // 细节:
        //      read方法会从连接通道中读取数据
        //      但是,需要有一个结束标记,此时的循环才会停止
        //      否则,程序就会一致停在read方法这里,等待读取下面的数据
        while((line = br.readLine()) != null){
            System.out.print(line);
        }

        // 4.回写数据
        OutputStream os = socket.getOutputStream();
        String str = "到底有多高兴呢?xxx";
        os.write(str.getBytes());

        // 5.释放资源
        // 表示断开与客户端之间的连接
        socket.close();
        // 表示关闭服务器端
        ss.close();
    }
}